package gov.mmgt.netmanager.service;

import gov.mmgt.netmanager.common.exception.MyException;
import gov.mmgt.netmanager.common.util.StringUtil;
import gov.mmgt.netmanager.dao.AccountDao;
import gov.mmgt.netmanager.models.Account;
import gov.mmgt.netmanager.vo.AccountVO;

import java.util.ArrayList;
import java.util.List;

public class AccountService {
	private AccountDao accountDao;
	
	public AccountService() {
		accountDao = new AccountDao();
	}
	
	/**
	 * 
	 * 方法概述：根据ID获取用户信息
	 * 描述：根据ID获取用户信息
	 * @param id
	 * @return
	 * @throws MyException
	 * 返回类型：List<Account>
	 * 修改人：梁铭显
	 * 修改时间：2014-5-18
	 */
	public List<AccountVO> findById(int id) throws MyException{
		try {
			List<Account> accounts = accountDao.findById(id);
			return transformToVos(accounts);
		} catch (Exception e) {
			MyException myException = new MyException("获取ID为"+id+"的用户数据出错！错误代码：1003");
			throw myException;
		}
	}
	
	/**
	 * 
	 * 方法概述：获取所有用户数据
	 * 描述：获取所有用户数据
	 * @return
	 * @throws Exception
	 * 返回类型：List<Account>
	 * 修改人：梁铭显
	 * 修改时间：2014-5-18
	 */
	public List<AccountVO> findAll() throws MyException {
		try {
			List<Account> accounts = accountDao.findAll();
			return transformToVos(accounts);
		} catch (Exception e) {
			MyException myException = new MyException("获取所有用户数据出错！错误代码：1004");
			throw myException;
		}
	}
	
	/**
	 * 
	 * 方法概述：根据账户名称获取用户数据
	 * 描述：根据账户名称获取用户数据
	 * @param account
	 * @return
	 * 返回类型：List<AccountVO>
	 * 修改人：梁铭显
	 * 修改时间：2014-5-19
	 */
	public List<AccountVO> findByAccount(String account) throws MyException {
		List<Account> accounts;
		try {
			accounts = accountDao.findByAccount(account);
			return transformToVos(accounts);
		} catch (Exception e) {
			MyException myException = new MyException("获取"+account+"数据出错！错误代码：1010");
			throw myException;
		}
	}
	
	/**
	 * 
	 * 方法概述：修改用户数据
	 * 描述：修改用户数据
	 * @param account
	 * @return
	 * 返回类型：Account
	 * 修改人：梁铭显 
	 * 修改时间：2014-5-26
	 */
	public void update(AccountVO vo) throws MyException {
		List<Account> accounts = new ArrayList<Account>();
		
		try {
			accounts = accountDao.findById(vo.getId());
		} catch (Exception e) {
			MyException myException = new MyException("修改ID为"+vo.getId()+"的用户数据时，获取该用户原数据出错！错误代码：1011");
			throw myException;
		}
		
		for(Account account : accounts) {
			if(account.getId().equals(vo.getId())) {
				account.setName(vo.getName());
				account.setAdmin(vo.isAdmin());
				
				try {
					accountDao.update(account);
				} catch (Exception e) {
					MyException myException = new MyException("修改ID为"+vo.getId()+"的用户数据失败！错误代码：1012");
					throw myException;
				}
			}
		}
	}
	
	/**
	 * 
	 * 方法概述：DO列表转VO列表
	 * 描述：DO列表转VO列表
	 * @param dos
	 * @return
	 * 返回类型：List<AccountVO>
	 * 修改人：梁铭显 
	 * 修改时间：2014-5-26
	 */
	public List<AccountVO> transformToVos(List<Account> dos) {
		List<AccountVO> vos = new ArrayList<AccountVO>();
		
		for(Account o : dos) {
			vos.add(transformToVo(o));
		}
		
		return vos;
	}
	
	/**
	 * 
	 * 方法概述：DO转VO
	 * 描述：DO转VO
	 * @param o
	 * @return
	 * 返回类型：AccountVO
	 * 修改人：梁铭显 
	 * 修改时间：2014-5-26
	 */
	public AccountVO transformToVo(Account o) {
		AccountVO accountVo = new AccountVO();
		accountVo.setId(o.getId());
		accountVo.setAccount(o.getAccount());
		accountVo.setPassword(o.getPassword());
		accountVo.setName(o.getName());
		accountVo.setAdmin(o.isAdmin());
		return accountVo;
	}
	
	/**
	 * 
	 * 方法概述：VO转DO
	 * 描述：VO转DO
	 * @param vo
	 * @return
	 * 返回类型：Account
	 * 修改人：梁铭显 
	 * 修改时间：2014-5-26
	 */
	public Account transformToDo(Account vo) {
		Account o = new Account();
		
		o.setAccount(vo.getAccount());
		o.setPassword(StringUtil.MD5Encode(vo.getPassword()));
		o.setName(vo.getName());
		o.setAdmin(vo.isAdmin());
		
		return o;
	}
}
